package com.misyi.list;

/**
 * list 结构接口
 *
 * @author licong
 * @date 2021-09-28 下午11:36
 */
interface List<E> {

    /**
     * 返回列表的元素数量
     *
     * @return 元素值
     */
    int size();

    /**
     * 判断列表是否为空
     *
     * @return 判断结果
     */
    boolean isEmpty();

    /**
     * 判断元素是否存在列表中
     *
     * @param element 判断的元素
     * @return 判断结果
     */
    boolean contains(E element);

    /**
     * 查找指定元素在列表中的索引位置
     *
     * @param element 元素
     * @return 在列表中索引位置
     */
    int indexOf(E element);

    /**
     * 在列表最后面添加指定元素
     *
     * @param element 元素
     */
    void add(E element);

    /**
     * 在指定索引位置添加元素
     *
     * @param index 索引位置
     * @param element 元素
     */
    void add(int index, E element);

    /**
     * 查找指定索引位置的元素
     *
     * @param index 索引
     * @return 指定索引位置的元素
     */
    E get(int index);

    /**
     * 往指定索引位置设置元素
     *
     * @param index 索引
     * @param element 添加的元素
     * @return 原索引位置的元素
     */
    E set(int index, E element);

    /**
     * 在列表中删除指定索引的元素
     *
     * @param index 索引位置
     * @return 被删除的元素
     */
    E remove(int index);

    /**
     * 从此列表中删除第一次出现的指定元素
     *
     * @param element 删除的元素
     * @return 删除操作是否成功
     */
    boolean remove(E element);

    /**
     * 清空列表
     */
    void clear();
}
